package edu.hunau.cxb19.basic.class10;

import java.util.Arrays;
import java.util.Scanner;

/**
 *
 * @author hb
 *
 *         2020-02-20 15:07:11
 */
public class ArrayCopyDemo {
	public static void main(String[] args) {
		// systemArrayCopy();
//		int[] src = { 1, 2, 3, 4, 5, 6 };
//		int[] dest = insert(src, 4, 99);
//		System.out.println(Arrays.toString(dest));
//		dest = delete(dest, 1);
//		System.out.println(Arrays.toString(dest));

//		int[] dest = add();
//		System.out.println(Arrays.toString(dest));
//		arraysCopyOf();
		int[] dest = add02();
		System.out.println(Arrays.toString(dest));
		
	}

	public static void arraysCopyOf() {
		int[] src = { 1, 2, 3 };
		int[] result = Arrays.copyOf(src, src.length + 3);
		System.out.println(Arrays.toString(result));
		result = Arrays.copyOf(src, src.length - 1);
		System.out.println(Arrays.toString(result));
	}

	public static int[] add02() {
		Scanner sc = new Scanner(System.in);
		int[] arr = new int[0];
		while (true) {
			int a = sc.nextInt();
			if (a == -1) {
				break;// 终止输入
			}
			arr = Arrays.copyOf(arr, arr.length + 1);
			arr[arr.length - 1] = a;
		}
		return arr;
	}

	/**
	 * 从控制台将多个正整数保存到数组中。如果输入-1表示停止输入
	 * 
	 * @return
	 */
	public static int[] add() {
		Scanner sc = new Scanner(System.in);
		int[] arr = new int[1];
		while (true) {
			int a = sc.nextInt();
			if (a == -1) {
				break;// 终止输入
			}
			// 将数据a总是保存到数组的最后
			arr[arr.length - 1] = a;
			// 对数组进行扩容
			int[] dest = new int[arr.length + 1];
			System.arraycopy(arr, 0, dest, 0, arr.length);
			arr = dest;

		}
		int[] result = new int[arr.length - 1];
		System.arraycopy(arr, 0, result, 0, arr.length - 1);

		return result;

	}

	public static void systemArrayCopy() {
		int[] src = { 1, 2, 3, 4, 5, 6, 7 };
		// 声明一个目标数组
		int[] dest = new int[9];
		System.out.println(Arrays.toString(dest));
		// 实现数组的复制
		System.arraycopy(src, 2, dest, 3, 4);
		// 防止下标越界的问题
		// System.arraycopy(src, 2, dest, 7, 4);
		System.out.println(Arrays.toString(dest));

	}

	/**
	 * 向数组arr中指定的位置插入一个数据number
	 * 
	 * @param arr
	 * @param index
	 * @param number
	 */
	public static int[] insert(int[] arr, int index, int number) {
		// 创建一个新的数组
		int[] dest = new int[arr.length + 1];
		// 源数组的 index前半段
//		for (int i = 0; i < index; i++) {
//			dest[i] = arr[i];
//		}
		System.arraycopy(arr, 0, dest, 0, index);
		dest[index] = number;
		// 源数组的 index后半段
//		for (int i = index ; i < arr.length; i++) {
//			dest[i+1] = arr[i];
//		}
		System.arraycopy(arr, index, dest, index + 1, arr.length - index);
		return dest;
	}

	/**
	 * 从数组中将指定位置的数据删除
	 * 
	 * @param arr
	 * @param index
	 * @return
	 */
	public static int[] delete(int[] arr, int index) {
		int[] dest = new int[arr.length - 1];
		System.arraycopy(arr, 0, dest, 0, index);
		System.arraycopy(arr, index + 1, dest, index, arr.length - index - 1);
		return dest;
	}
}
